package com.linghu.qqclient.service;

import com.linghu.qqcommon.Message;
import com.linghu.qqcommon.MessageType;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * @author 令狐荣豪
 * @version 1.0
 */
public class ClientConnectServerThread extends Thread{
    //该线程需要持有Socket
    private Socket socket;

    public ClientConnectServerThread(Socket socket) {//构造器可以接收socket对象
        this.socket = socket;
    }

    @Override
    public void run() {
        //因为线程需要在后台和服务器通信，因此我们需要while循环
        try {
            System.out.println("客户端线程，等待从读取服务端发送的消息");
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            Message message=(Message)ois.readObject();//如果服务器没有发送message对象，线程会阻塞在这里
            //判断这个Message类型，做相应的业务处理
            //如果读取到的是服务端返回的在线用户列表
            if (message.getMesType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)) {
                String[] onlineUsers = message.getContent().split(" ");
                System.out.println("=======当前在线用户列表=======");
                for (int i = 0; i < onlineUsers.length; i++) {
                    System.out.println("用户：" + onlineUsers[i]);
                }

            } else if (message.getMesType().equals(MessageType.MESSAGE_COMM_MES)) {
                //普通的聊天消息

                //把从服务器转发的消息，显示到控制台即可
                System.out.println("\n"+message.getSender()+"对"+message.getGetter()+"说："+message.getContent());

            } else if (message.getMesType().equals(MessageType.MESSAGE_TO_ALL_MES)) {
                //显示在客户端的控制台
                System.out.println("\n"+message.getSender()+"对大家伙说："+message.getContent());

            } else if (message.getMesType().equals(MessageType.MESSAGE_FILE_MES)) {//如果是文件消息
                System.out.println("\n"+message.getSender()+"给"+message.getGetter()+"发送了文件"
                +message.getSrc()+"到我的电脑目录"+message.getDest());

                //取出message的文件字节数组，通过文件输出流写出到磁盘
                FileOutputStream fileOutputStream = new FileOutputStream(message.getDest());
                fileOutputStream.write(message.getFileBytes());
                fileOutputStream.close();
                System.out.println("\n 保存文件成功！");
            } else {
                System.out.println("是其他类型的message，暂时不处理。。。。");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Socket getSocket() {//为了更方便得到Socket
        return socket;
    }
}
